#ifndef __losor_expression_h__
#define __losor_expression_h__

#include "symbol.h"
#include "syntax.h"
#include "preprocessor.h"

#ifdef __cplusplus
extern "C" {
#endif

#define MAX_NR_FUNC_PARA        (1024)

    typedef struct _exp_tree
    {
        control_life();
        vartype *ret;
        token *opt;
        void *opd1, *opd2, *opd3;
    } exp_tree;

    exp_tree* exp_tree_create( vartype *ret, token *opt, void* opd1, void* opd2, void* opd3 );
    int exp_tree_release( exp_tree* et );

    exp_tree *expression( lex_info *lex );
    exp_tree *exp_const( lex_info *lex );
    exp_tree *exp_assign( lex_info *lex );
    exp_tree *exp_cond( lex_info *lex );
    exp_tree *exp_log_or( lex_info *lex );
    exp_tree *exp_log_and( lex_info *lex );
    exp_tree *exp_inc_or( lex_info *lex );
    exp_tree *exp_exc_or( lex_info *lex );
    exp_tree *exp_and( lex_info *lex );
    exp_tree *exp_equal( lex_info *lex );
    exp_tree *exp_relat( lex_info *lex );
    exp_tree *exp_shift( lex_info *lex );
    exp_tree *exp_add( lex_info *lex );
    exp_tree *exp_mul( lex_info *lex );
    exp_tree *exp_cast( lex_info *lex );
    exp_tree *exp_unary( lex_info *lex );
    exp_tree *exp_post( lex_info *lex );
    exp_tree *exp_primary( lex_info *lex );

#ifdef __cplusplus
};
#endif

#endif // __losor_expression_h__
